import request from '@/utils/request'

/**
 * 上传图片API
 * @param {File} file 图片文件
 * @param {Object} params 图片上传参数
 * @param {string} params.name 图片名称
 * @param {string} params.introduction 图片介绍
 * @param {number} params.classifyId 分类ID
 * @param {Array<string>} params.tags 图片标签
 * @param {number} params.spaceId 空间ID
 * @returns {Promise<Object>} 上传结果Promise
 */
export function uploadPictureAPI(file, params) {
  const formData = new FormData();

  // 添加文件
  formData.append('file', file);

  // 添加其他参数
  Object.entries(params).forEach(([key, value]) => {
    if (value !== undefined && value !== null) {
      // 处理数组参数
      if (Array.isArray(value)) {
        value.forEach(item => formData.append(key, item));
      } else {
        formData.append(key, value);
      }
    }
  });

  return request({
    url: '/picture/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}

/**
 * 上传图片URL
 * @param {Object} data - 图片URL上传请求数据
 * @returns {Promise} - 返回一个Promise对象
 */
export function uploadPictureByUrlAPI(data) {
  return request({
    url: '/picture/upload/url',
    method: 'post',
    data
  })
}

/**
 * 删除图片（管理员权限）
 * @param {Object} data - 图片删除请求数据
 * @returns {Promise} - 返回一个Promise对象
 */
export function deletePictureAPI(data) {
  return request({
    url: '/picture/delete',
    method: 'delete',
    data
  })
}

/**
 * 修改图片
 * @param {Object} data - 图片修改请求数据
 * @returns {Promise} - 返回一个Promise对象
 */
export function updatePictureAPI(data) {
  return request({
    url: '/picture/update',
    method: 'put',
    data
  })
}

/**
 * 获取图片分页列表
 * @param {Object} params - 图片查询请求参数
 * @returns {Promise} - 返回一个Promise对象
 */
export function getPictureListAPI(params) {
  return request({
    url: '/picture/list',
    method: 'get',
    params
  })
}

/**
 * 管理员获取图片列表（管理员权限）
 * @param {Object} params - 图片查询请求参数
 * @returns {Promise} - 返回一个Promise对象
 */
export function getPictureListAdminAPI(params) {
  return request({
    url: '/picture/list/admin',
    method: 'get',
    params
  })
}

/**
 * 根据ID获取图片信息
 * @param {number} id - 图片ID
 * @returns {Promise} - 返回一个Promise对象
 */
export function getPictureByIdAPI(id) {
  return request({
    url: '/picture/get',
    method: 'get',
    params: { id }
  })
}

/**
 * 审核图片
 * @param {Object} data - 图片审核请求数据
 * @returns {Promise} - 返回一个Promise对象
 */
export function reviewPictureAPI(data) {
  return request({
    url: '/picture/review',
    method: 'post',
    data
  })
}

/**
 * 批量抓取图片
 * @param {Object} data - 批量抓取请求数据
 * @returns {Promise} - 返回一个Promise对象
 */
export function batchFetchPicturesAPI(data) {
  return request({
    url: '/picture/upload/batch',
    method: 'post',
    data
  })
}


/**
 * 下载图片
 */
export function downloadPictureAPI(id) {
  return request({
    url: '/picture/download',
    method: 'post',
    data: {
      id
    }
  })
}

/**
 * 以图搜图
 */
export function searchPictureAPI(pictureId) {
  return request({
    url: '/picture/search/picture/so',
    method: 'post',
    data: {
      pictureId
    }
  })
}

/**
 * 批量更改图片分类
 */

export function batchUpdatePictureClassifyAPI(data) {
  return request({
    url: '/picture/edit/batch',
    method: 'post',
    data
  })
}


/**
 * 创建文生图任务
 */
export function createTextToImageTaskAPI(data) {
  return request({
    url: '/picture/create/text/to/image/task',
    method: 'post',
    data
  })
}

/**
 * 创建AI图片编辑人物
 */

export function createAIPictureEditPersonTaskAPI(data) {
  return request({
    url: '/picture/create/picture/edit/task',
    method: 'post',
    data
  })
}

/**
 * 获取AI任务结果
 */
export function getAITaskResultAPI(taskId) {
  return request({
    url: '/picture/get/text/to/image/task/result',
    method: 'get',
    params: {
      taskId
    }
  })
}


// 上传图片到阿里云临时空间接口
export const uploadPictureToAliyunAPI = (file, progressCallback) => {
  // 创建FormData对象，用于上传文件
  const formData = new FormData()
  formData.append('file', file)
  return request({
    url: '/picture/upload/temp',
    method: 'post',
    data: formData,
    // 设置请求头，让axios正确处理FormData
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    // 上传进度回调
    onUploadProgress: (progressEvent) => {
      if (progressEvent.lengthComputable && progressCallback) {
        const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100)
        progressCallback(percent)
      }
    }
  })
}
